home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / tcclib.exe / GDATE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-02-08  |  3.1 KB  |  126 lines

  1. #include "tcclib.h"
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5.  
  6. extern char *CCMONTHS[12];
  7.  
  8. extern int   CCMonthDays[12];
  9.  
  10. unsigned GetDate( unsigned startdate )
  11. {
  12.     int i, j, r;
  13.     int mon, day, year;
  14.     int x, y;
  15.     char datestr[15];
  16.  
  17.     TcclibInitialize();
  18.  
  19.     strcpy( datestr, RevJul( startdate ) );
  20.     sscanf( datestr, "%d-%d-%d", &mon, &day, &year );
  21.     year += 1900;
  22.     mon--;
  23.  
  24.     DrawBox( 30,  7, 51, 18 );
  25.     HLin( 30,  9, 51,  9 );
  26.     HLin1( 30, 11, 51, 11 );
  27.     AtSay( 31, 10, "Su Mo Tu We Th Fr Sa" );
  28.  
  29. REDRAW_CALENDAR:
  30.     AtSayF( 35, 8, "%s   , %d", CCMONTHS[mon], year );
  31.     CCMonthDays[1] = 28;
  32.     if ( year % 4 == 0 ) {
  33.         if ( year % 400 == 0 )
  34.             ;
  35.         else
  36.             CCMonthDays[1] = 29;
  37.     }
  38.  
  39.     sprintf( datestr, "%d-%d-%d", mon+1, 1, year );
  40.     j = ( 1 + Julian( datestr ) ) % 7;
  41.  
  42.     r = 12;
  43.  
  44.     BlockErase( 31, 12, 50, 17 );
  45.     for (i=1; i<CCMonthDays[mon]+1; ++i) {
  46.         AtSayF( 31+j*3, r, "%2d", i );
  47.         if ( i == day ) {
  48.             x = j;
  49.             y = r - 12;
  50.         }
  51.         if ( ++j > 6 ) {
  52.             r++;
  53.             j = 0;
  54.         }
  55.     }
  56.  
  57.     for ( ;; ) {
  58.         AtSayF( 39,8,"%2d",day);
  59.         ChangeBlock( 30, 11, 51, 18, A_NORMAL );
  60.         ChangeBlock( 31+x*3, y+12, 32+x*3, y+12, A_REVERSE );
  61.         switch( GComm() ) {
  62.             case CR:
  63.                 sprintf( datestr, "%d-%d-%d", mon+1, day, year );
  64.                 return( Julian( datestr ) );
  65.             case ESC:
  66.                 return( 0 );
  67.             case HOME:
  68.                 day=1;
  69.                 goto REDRAW_CALENDAR;
  70.             case END:
  71.                 day=CCMonthDays[mon];
  72.                 goto REDRAW_CALENDAR;
  73.             case DOWN:
  74.                 y++;
  75.                 day += 7;
  76.                 break;
  77.             case UP:
  78.                 y--;
  79.                 day -= 7;
  80.                 break;
  81.             case LEFT:
  82.                 if ( --x < 0 ) {
  83.                     x = 6;
  84.                     y--;
  85.                 }
  86.                 day--;
  87.                 break;
  88.             case RIGHT:
  89.                 if ( ++x > 6 ) {
  90.                     x = 0;
  91.                     y++;
  92.                 }
  93.                 day++;
  94.                 break;
  95.             case PGUP:
  96.                 if ( --mon < 0 ) {
  97.                     mon = 11;
  98.                     year--;
  99.                 }
  100.                 goto REDRAW_CALENDAR;
  101.             case PGDN:
  102.                 if ( ++mon > 11 ) {
  103.                     mon = 0;
  104.                     year++;
  105.                 }
  106.                 goto REDRAW_CALENDAR;
  107.         }
  108.         if ( day > CCMonthDays[mon] ) {
  109.             day -= CCMonthDays[mon];
  110.             if ( ++mon > 11 ) {
  111.                 mon = 0;
  112.                 year++;
  113.             }
  114.             goto REDRAW_CALENDAR;
  115.         }
  116.         if ( day < 1 ) {
  117.             if ( --mon < 0 ) {
  118.                 mon = 11;
  119.                 year--;
  120.             }
  121.             day += CCMonthDays[mon];
  122.             goto REDRAW_CALENDAR;
  123.         }
  124.     }
  125. }
  126.